/**
 * 解决两个数相加精度丢失问题
 * @param a
 * @param b
 * @returns {Number}
 */
export function floatAdd(a, b) {
	var c, d, e;
	if (undefined == a || null == a || '' == a || isNaN(a)) {
		a = 0;
	}
	if (undefined == b || null == b || '' == b || isNaN(b)) {
		b = 0;
	}
	try {
		c = a.toString().split('.')[1].length;
	} catch (f) {
		c = 0;
	}
	try {
		d = b.toString().split('.')[1].length;
	} catch (f) {
		d = 0;
	}
	e = Math.pow(10, Math.max(c, d));
	return (floatMul(a, e) + floatMul(b, e)) / e;
}
/**
 * 解决两个数相减精度丢失问题
 * @param a
 * @param b
 * @returns {Number}
 */
export function floatSub(a, b) {
	return (floatMul(a, e) - floatMul(b, e)) / e;
}
/**
 * 解决两个数相乘精度丢失问题
 * @param a
 * @param b
 * @returns {Number}
 */
export function floatMul(a, b) {
	var c = 0,
		d = a.toString(),
		e = b.toString();
	try {
		c += d.split('.')[1].length;
	} catch (f) {}
	try {
		c += e.split('.')[1].length;
	} catch (f) {}
	return (Number(d.replace('.', '')) * Number(e.replace('.', ''))) / Math.pow(10, c);
}
/**
 * 解决两个数相除精度丢失问题
 * @param a
 * @param b
 * @returns
 */
export function floatDiv(a, b) {
	var c,
		d,
		e = 0,
		f = 0;
	try {
		e = a.toString().split('.')[1].length;
	} catch (g) {}
	try {
		f = b.toString().split('.')[1].length;
	} catch (g) {}
	return (
		(c = Number(a.toString().replace('.', ''))),
		(d = Number(b.toString().replace('.', ''))),
		floatMul(c / d, Math.pow(10, f - e))
	);
}

/**
 * 保留有效数字并且4舍5入
 * @param {*} v 表示要转换的值 表示要保留的位数
 * @param {*} e 表示要保留的位数
 * @returns
 */
export function round(v, e) {
	var t = 1;
	for (; e > 0; t *= 10, e--);
	for (; e < 0; t /= 10, e++);
	return Math.round(v * t) / t;
}

/**
 * 数字转换为文字形式
 * @param {*} num  表示要转换的值
 * @returns
 */
export function convertToChinese(num) {
	var N = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
	var str = num.toString();
	var len = num.toString().length;
	var C_Num = [];
	for (var i = 0; i < len; i++) {
		C_Num.push(N[str.charAt(i)]);
	}
	return C_Num.join('');
}

/**
 * 数字转换为文字形式-1
 * @param {*} number  表示要转换的值
 * @returns
 */
export function numberChinese(number) {
	var units = '个十百千万@#%亿^&~',
		chars = '零一二三四五六七八九';
	var a = (number + '').split(''),
		s = [];
	if (a.length > 12) {
		throw new Error('too big');
	} else {
		for (var i = 0, j = a.length - 1; i <= j; i++) {
			if (j == 1 || j == 5 || j == 9) {
				//两位数 处理特殊的 1*
				if (i == 0) {
					if (a[i] != '1') s.push(chars.charAt(a[i]));
				} else {
					s.push(chars.charAt(a[i]));
				}
			} else {
				s.push(chars.charAt(a[i]));
			}
			if (i != j) {
				s.push(units.charAt(j - i));
			}
		}
	}
	return s
		.join('')
		.replace(/零([十百千万亿@#%^&~])/g, function (m, d, b) {
			//优先处理 零百 零千 等
			b = units.indexOf(d);
			if (b != -1) {
				if (d == '亿') return d;
				if (d == '万') return d;
				if (a[j - b] == '0') return '零';
			}
			return '';
		})
		.replace(/零+/g, '零')
		.replace(/零([万亿])/g, function (m, b) {
			// 零百 零千处理后 可能出现 零零相连的 再处理结尾为零的
			return b;
		})
		.replace(/亿[万千百]/g, '亿')
		.replace(/[零]$/, '')
		.replace(/[@#%^&~]/g, function (m) {
			return { '@': '十', '#': '百', '%': '千', '^': '十', '&': '百', '~': '千' }[m];
		})
		.replace(/([亿万])([一-九])/g, function (m, d, b, c) {
			c = units.indexOf(d);
			if (c != -1) {
				if (a[j - c] == '0') return d + '零' + b;
			}
			return m;
		});
}
